#include "pzmq_data.h"

pzmq_data::pzmq_data()
{
    zmq_msg_init(&_msg);
}
pzmq_data::~pzmq_data()
{
    zmq_msg_close(&_msg);
}

// 返回消息内容的共享指针字符串
std::shared_ptr<std::string> pzmq_data::GetString()
{
    size_t sz = zmq_msg_size(&_msg);
    return std::make_shared<std::string>(static_cast<const char *>(zmq_msg_data(&_msg)), sz);
}
// 返回消息字符串形式副本
std::string pzmq_data::String()
{
    size_t sz = zmq_msg_size(&_msg);
    return std::string(static_cast<const char *>(zmq_msg_data(&_msg)), sz);
}
// 返回消息原始指针
void *pzmq_data::Data()
{
    return zmq_msg_data(&_msg);
}
// 返回消息指针
zmq_msg_t *pzmq_data::Get()
{
    return &_msg;
}
// 返回消息大小
size_t pzmq_data::Size()
{
    return zmq_msg_size(&_msg);
}

// 序列化
std::string pzmq_data::SetParam(std::string param0, std::string param1)
{
    std::string data = " " + param0 + param1;
    data[0] = static_cast<char>(param0.size());
    return data;
}
// 反序列化
std::string pzmq_data::GetParam(int index, const std::string &idata)
{
    const char *data = nullptr;
    size_t sz = 0;

    if (idata.size() > 0)
    {
        data = idata.c_str();
        sz = idata.size();
    }
    else
    {
        data = static_cast<const char *>(zmq_msg_data(&_msg));
        sz = zmq_msg_size(&_msg);
    }

    if (index % 2 == 0)
    {
        return std::string(data + 1, static_cast<size_t>(data[0]));
    }
    else
    {
        return std::string(data + data[0] + 1, static_cast<size_t>(sz - data[0] - 1));
    }
}